Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

346
Views
Uso de punteros para iterar a través de argv[]

Quiero usar el siguiente código, pero sin indexar la matriz con "[][]" y sustituirlo por punteros

 for (int i = 0; i < argc; i++) { for (int j = 0; argv[i][j] != '\0'; j++) { //code } }

Sé que puede usar punteros para atravesar una matriz, pero no estoy seguro de cómo hacerlo con una longitud indefinida en la segunda matriz, en este caso, la cadena de entrada. Dado que cada elemento de argv[] puede tener una longitud diferente, quiero asegurarme de poder leer correctamente los caracteres y saber cuándo finaliza cada elemento de argv[] y comienza el siguiente.

Espero que sea algo como: (Si el siguiente encabezado de main es incorrecto, dígamelo).

 int main(int argc, char **argv) { for (int i = 0; i < argc; i++) { while(argv != '\0') { //code *argv+1; } //to skip null character argv+1; } }
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Dado que el último elemento en argv es NULL , no necesita indexarlo ni comparar nada con argc si realmente no lo desea.

 int main(int argc, char *argv[]) { for (char **arg = argv; *arg; ++arg) { // for each arg for (char *p = *arg; *p; ++p) { // for each character process(*p); } } }

*arg será NULL al final de la lista de argumentos, lo cual es falso. *p será '\0' al final de cada cadena, lo cual es falso.

Desde N1256 5.1.2.2.1/2

Si se declaran, los parámetros de la función principal deberán obedecer a las siguientes restricciones:

— El valor de argc será no negativo.

— argv[argc] será un puntero nulo.

over 4 years ago · Santiago Trujillo Report

0

Dado for loop permite cualquier tipo de valores, no necesariamente números enteros para su "índice de bucle", su bucle podría reescribirse así:

 for (char **a = argv ; a != argv+argc ; a++) { for(char *p = *a ; *p != '\0' ; p++) { // code uses *p instead of argv[i][j] } }

El ciclo interno usa p como la variable de ciclo, que se incrementa con el p++ regular y se verifica con *p != '\0' . La condición del ciclo se podría acortar a *p , por lo que el ciclo interno se vería así:

 for(char *p = *a ; *p ; p++)
over 4 years ago · Santiago Trujillo Report

0

Sí, puede iterar a través de argv usando punteros.

El ciclo interno le dice a p que apunte al comienzo de argv+i y lo recorra hasta llegar a \0 .

 #include <stdio.h> int main(int argc, char **argv) { int i; char *p; for(i=0; i < argc; i++) { for(p=*(argv+i); *p; p++) printf("%c", *p); printf("\n"); } }

Si solo está interesado en atravesar cada argumento, pero no está interesado en analizar cada carácter, simplemente puede hacerlo.

 #include <stdio.h> int main(int argc, char **argv) { int i; char *p; for(i=0; i < argc; i++) { printf("Argument position %d is %s\n", i, *(argv+i)); } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!